package org.gtesoreria

class ConsultaService {

    static transactional = true

    def consultaHijos(String edadFrom, String edadTo, String lugarTrabajo, String delegado, String sexo, String anSort, String anOrder,String offset, int max) {

		def query = Familiar.createCriteria()
		def hijosEntreEdades = []
		String titulo
		if(edadFrom < edadTo){
			hijosEntreEdades  = query.list([offset:offset, max:max]) {
				between("fechaNacimiento", 
					actualDateMinusYears(new Integer(edadTo)),
					actualDateMinusYears(new Integer(edadFrom)))
				eq("tipo", Familiar.TIPO_HIJO)
				afiliado {
					if(lugarTrabajo != "null") 
						eq("lugarTrabajo", LugarTrabajo.get(lugarTrabajo))
					if(delegado != "null") 
						eq("delegado", Afiliado.get(delegado))
				}
				if(sexo != "null") 
					eq("sexo",sexo)
				if(anSort == "afiliado.apellidoNombre"){
					afiliado{	
						order("apellidoNombre", anOrder)
					}
				}else if(anSort == "afiliado.delegado"){
					afiliado{
						order("delegado", anOrder)
					}
				}else if(anSort == "afiliado.lugarTrabajo"){
					afiliado{
							order("lugarTrabajo", anOrder)
					}
				} else {
					order(anSort, anOrder)
				}
				
			}
		}
		if(edadFrom.equals(edadTo)){
			hijosEntreEdades  = query.list([offset:offset, max:max]) {
				between("fechaNacimiento", actualDateMinusYears(new Integer(edadTo) + 1),
					actualDateMinusYears(new Integer(edadTo)))
				eq("tipo", Familiar.TIPO_HIJO)
				afiliado {
					if(lugarTrabajo != "null") eq("lugarTrabajo", LugarTrabajo.get(lugarTrabajo))
					if(delegado != "null") eq("delegado", Afiliado.get(delegado))
				}
				if(sexo != "null") eq("sexo",sexo)
				if(anSort == "afiliado.apellidoNombre"){
					afiliado{	
						order("apellidoNombre", anOrder)
					}
				}else if(anSort == "afiliado.delegado"){
					afiliado{
						order("delegado", anOrder)
					}
				}else if(anSort == "afiliado.lugarTrabajo"){
					afiliado{
							order("lugarTrabajo", anOrder)
					}
				} else {
					order(anSort, anOrder)
				}
			}
		}
		return hijosEntreEdades

    }
	
	def static actualDateMinusYears(int years){
		def cal = Calendar.instance
		cal.roll(Calendar.YEAR, -years)
		return cal.getTime()
	}
	
	def consultaCumples(String delegado, String lugarTrabajo, String mesCumple, String anSort, String anOrder, String offset, int max){
		def result = null
		def query = Afiliado.createCriteria()
		result = query.list([offset:offset, max:max]) {
			eq("mesNacimiento",mesCumple)
			if(delegado != "null") {
				eq("delegado", Afiliado.get(delegado))
			}
			if(lugarTrabajo != "null") {
				eq("lugarTrabajo", LugarTrabajo.get(lugarTrabajo))
			}
			order(anSort, anOrder)
		}
		return result
	}
	
	def consultaDelegado(String delegado, String lugarTrabajo, String anSort, String anOrder, String offset, int max){
		def result = null
		def query = Afiliado.createCriteria()
		result = query.list([offset:offset, max:max]) {
			if(delegado.equals("null")) { 
				isNull("delegado")
			} else{
				eq("delegado", Afiliado.get(delegado))
			}
			if(!lugarTrabajo.equals("null")) {
				eq("lugarTrabajo", LugarTrabajo.get(lugarTrabajo))
			}
			order(anSort, anOrder)			
		}
		return result;
	}
	
	def consultaLugarTrabajo(String delegado, String lugarTrabajo, String anSort, String anOrder, String offset, int max){
		def result = null
		def query = Afiliado.createCriteria()
		result = query.list([offset:offset, max:max]) {
			if(!delegado.equals("null")) {
				eq("delegado", Afiliado.get(delegado))
				eq("lugarTrabajo", LugarTrabajo.get(lugarTrabajo))
			} else{
				eq("lugarTrabajo", LugarTrabajo.get(lugarTrabajo))
			}
			
			order(anSort, anOrder)
		}
		
		return result
	}
}
